package xyz.xtt.admin.utils;

import java.util.Objects;

import xyz.xtt.admin.constants.ErrorMessage;
import xyz.xtt.admin.exception.ChainException;

/**
 * @author huqibo
 * @date 2024/12/26
 */
public final class AssertUtils {
	/**
	 * 条件为真，抛出异常
	 * 
	 * @param flag
	 * @param message
	 */
	public static void isTrue(boolean flag, ErrorMessage message) {
		if (flag) {
			throw new ChainException(message);
		}
	}

	/**
	 * 条件为假，抛出异常
	 * 
	 * @param flag
	 * @param message
	 */
	public static void isFalse(boolean flag, ErrorMessage message) {
		if (!flag) {
			throw new ChainException(message);
		}
	}

	/**
	 * 抛出异常，并打日志
	 * 
	 * @param flag
	 * @param message
	 * @param log
	 */
	public static void isTrue(boolean flag, ErrorMessage message, Runnable log) {
		if (flag) {
			log.run();
			throw new ChainException(message);
		}
	}

	/**
	 * 条件为假，打印日志，抛出异常
	 * 
	 * @param flag
	 * @param message
	 * @param log
	 */
	public static void isFalse(boolean flag, ErrorMessage message, Runnable log) {
		if (!flag) {
			log.run();
			throw new ChainException(message);
		}
	}

	/**
	 * 对象判null 并输出日志
	 * 
	 * @param obj
	 * @param message
	 * @param log
	 */
	public static void isNull(Object obj, ErrorMessage message, Runnable log) {
		isTrue(Objects.isNull(obj), message, log);
	}

	/**
	 * 目标不是空 打印日志，并抛出异常
	 * 
	 * @param obj
	 * @param message
	 * @param log
	 */
	public static void nonNull(Object obj, ErrorMessage message, Runnable log) {
		isTrue(Objects.nonNull(obj), message, log);
	}

	/**
	 * 目标不是空 并抛出异常
	 * 
	 * @param obj
	 * @param message
	 */
	public static void nonNull(Object obj, ErrorMessage message) {
		isTrue(Objects.nonNull(obj), message);
	}

	/**
	 * 对象判null
	 * 
	 * @param obj
	 * @param message
	 */
	public static void isNull(Object obj, ErrorMessage message) {
		isTrue(Objects.isNull(obj), message);
	}
	
}
